package cn.feizhu.aimarket.ratelimit.annotation;


import cn.feizhu.aimarket.ratelimit.enums.RateLimitType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {

    /**
     * 限流key前缀
     */
    String key() default "";

    /**
     * 每个窗口允许的请求数
     */
    int rate() default 1;

    /**
     * 时间窗口 默认为1
     */
    int rateInterval() default 1;

    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 限流级别
     */
    RateLimitType limitType() default RateLimitType.USER;

    /**
     * 限流提示
     */
    String message() default "请求过于频繁，请稍后再试";

    /**
     * VIP倍率（VIP用户的限流倍数，如2表示VIP用户限流是普通用户的2倍）
     */
    int vipMultiplier() default 3;

    /**
     * VIP绝对次数覆盖（>0时优先使用该值，不使用倍率）
     * 例如普通用户 rate=3/天，而 VIP 想设置为 10/天，则设置 vipRateOverride=10
     */
    int vipRateOverride() default 0;
}
